package com.education.welco.service.impl;

import com.education.common.utils.Convert;
import com.education.welco.mapper.MineResTableMapper;
import com.education.welco.pojo.MineResTable;
import com.education.welco.pojo.SResources;
import com.education.welco.service.IMineResTableService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 我的资源库资源 服务层实现
 *
 * @Author: liftsail
 * @Date: 2022-10-22
 * @Description: 不积跬步无以至千里
 */
@Service
public class MineResTableServiceImpl implements IMineResTableService {

    @Autowired
    private MineResTableMapper mineResTableMapper;

    /**
     * 查询我的资源库资源信息
     *
     * @param mineResId 我的资源库资源ID
     * @return 我的资源库资源信息
     */
    @Override
    public MineResTable selectMineResTableById(Integer mineResId) {
        return mineResTableMapper.selectMineResTableById(mineResId);
    }

    /**
     * 查询我的资源库资源列表
     *
     * @param mineResTable 我的资源库资源信息
     * @return 我的资源库资源集合
     */
    @Override
    public List<MineResTable> selectMineResTableList(MineResTable mineResTable) {
        return mineResTableMapper.selectMineResTableList(mineResTable);
    }

    /**
     * 新增我的资源库资源
     *
     * @param mineResTable 我的资源库资源信息
     * @return 结果
     */
    @Override
    public int insertMineResTable(MineResTable mineResTable) {
        mineResTable.setCreateTime(new Date());
        return mineResTableMapper.insertMineResTable(mineResTable);
    }

    /**
     * 修改我的资源库资源
     *
     * @param mineResTable 我的资源库资源信息
     * @return 结果
     */
    @Override
    public int updateMineResTable(MineResTable mineResTable) {
        if (mineResTable.getMineResUrl().contains("1670306015230.png") || mineResTable.getMineResUrl().contains("1670306092028.png")) {
            mineResTable.setMineResUrl(null);
            mineResTable.setState(null);
        }
        return mineResTableMapper.updateMineResTable(mineResTable);
    }

    /**
     * 删除我的资源库资源对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteMineResTableByIds(String ids) {
        List<String> idList = Arrays.asList(Convert.toStrArray(ids));
        //依据idList查找对应资源的url
        List<MineResTable> mineResTableList = mineResTableMapper.queryResListByIdList(idList);
        List<String> urlList = mineResTableList.parallelStream().map(mineResTable -> mineResTable.getMineResUrl()).collect(Collectors.toList());
        try {
            QiniuUtil.deleteFileFromQinius(urlList);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mineResTableMapper.deleteMineResTableByIds(Convert.toStrArray(ids));
    }

    /**
     * 根据目录菜单的目录id查找资源表的资源
     *
     * @param catalogId
     * @return
     */
    @Override
    public List<MineResTable> queryResListByCatalogId(Integer catalogId, String resName) {
        return mineResTableMapper.queryResListByCatalogId(catalogId, resName);
    }

    /**
     * 查找某一类型的全部资源    老师id  查找的资源type  , 资源表 目录 in 目录
     *
     * @param catalogIdList
     * @return
     */
    @Override
    public List<MineResTable> queryAllResListByTeaIdAndType(List<Integer> catalogIdList, String resName, String state, Integer type) {
        return mineResTableMapper.queryAllResListByTeaIdAndType(catalogIdList, resName, state, type);
    }

    /**
     * 删除我的资源库资源-逻辑删除
     *
     * @param ids
     * @return
     */
    @Override
    public int logicDeleteMineResTableByIds(String ids) {
        List<String> idList = Arrays.asList(Convert.toStrArray(ids));
        return mineResTableMapper.logicDeleteMineResTableByIds(idList);
    }

    /**
     * 删除我的资源库资源-逻辑还原
     *
     * @param ids
     * @return
     */
    @Override
    public int logicRevertMineResTableByIds(String ids) {
        List<String> idList = Arrays.asList(Convert.toStrArray(ids));
        return mineResTableMapper.logicRevertMineResTableByIds(idList);
    }

    /**
     * 回收站列表查询  文件类型 文件名称  分页查询   (全部资源目录的资源表关联)
     *
     * @param teaId   老师id
     * @param type    资源类型 0全部,1,2,3
     * @param resName 资源名称
     * @param orderBy
     * @return
     */
    @Override
    public List<MineResTable> selectMineResTableRecycleList(Integer teaId, Integer type, String resName, String orderBy) {
        return mineResTableMapper.selectMineResTableRecycleList(teaId, type, resName, orderBy);
    }

    /**
     * 通过id集合查询详细信息
     *
     * @param selectedIdList
     * @return
     */
    @Override
    public List<SResources> queryResInfoListByIdList(List<String> selectedIdList) {
        return mineResTableMapper.queryResInfoListByIdList(selectedIdList);
    }

    /**
     * 移动资源分组
     *
     * @param ids
     * @param catalogId
     * @return
     */
    @Override
    public int moveBatch(String ids, Integer catalogId) {
        List<String> idList = Arrays.asList(Convert.toStrArray(ids));
        return mineResTableMapper.moveBatch(idList, catalogId);
    }

}